<?php
  define("VERSAO","1.5.1");
  # CONEXÃO COM BANCOS DE DADOS
  $conexao = False;

  switch ($g_db_type) {
    case "mysql":
      $conexao = mysql_connect($g_hostname,$g_db_username,$g_db_password);

      if ($conexao) {
        mysql_select_db($g_database_name,$conexao);

        mysql_query("SET NAMES 'utf8'");
        mysql_query('SET character_set_connection=utf8');
        mysql_query('SET character_set_client=utf8');
        mysql_query('SET character_set_results=utf8');
      }
    break;
    case "postgres":
      $conexao = pg_connect(sprintf("host=%s dbname=%s user=%s password=%s",$g_hostname,$g_database_name,$g_db_username,$g_db_password));
    break;
    default:
      echo("Nenhum banco de dados definido. Favor alterar a constante \"DATABASE\" em dbconfig.inc.php");
  }

  // Transforma "1,2,3,4" em "<1><2><3><4>"
  function tokenizar($aLista) {
    return "<" . str_replace(",","><",$aLista) . ">";
  }
            
  function acertarNomeSistema($aNomeSistema,$aPrefixosRemoviveis,$aAbreviaturas) {
    $tmpStr = $aNomeSistema;
    
    foreach ($aPrefixosRemoviveis as $prefixo) {
      
      $tmpStr = str_ireplace($prefixo,"",$tmpStr);
      
      $posPrefixo = stripos($tmpStr,"(");
      
      if ($posPrefixo > 0) {
          $tmpStr = substr($tmpStr, 0, $posPrefixo - 1);
      }
    }
    
    $tmpStr = trim($tmpStr);
    
    foreach ($aAbreviaturas as $de => $para) {
      $tmpStr = str_ireplace($de,$para,$tmpStr);
    }
    
    return $tmpStr;
  }
  
  function executarSQL($aSQL) {
    global $conexao;
    global $g_db_type;
    
    if ($g_db_type == "mysql")
      return mysql_query($aSQL,$conexao);
    else if ($g_db_type == "postgres")
      return pg_query($conexao,$aSQL);
  }
  
  function obterRegistro($aResource) {
    global $g_db_type;
    
    if ($g_db_type == "mysql")
      return mysql_fetch_object($aResource);
    else if ($g_db_type == "postgres")
      return pg_fetch_object($aResource);
  }
  
  function toBoolean($aValor) {
    global $g_db_type;
    
    if ($g_db_type == "mysql")
      return $aValor == 1;
    else if ($g_db_type == "postgres")
      return $aValor == "t";
  }
  
  function first($aResource) {
    global $g_db_type;
    
    if ($g_db_type == "mysql")
      mysql_data_seek($aResource, 0);
    else if ($g_db_type == "postgres")
      pg_result_seek($aResource, 0);
  }
  
  function echoDebug($aMensagem,$separador = True,$removerQuebras = True,$escaparAspas = True) {
    if (isset($_REQUEST["debug"]) && (md5($_REQUEST["debug"]) == "a9be34dbc908b7a7379f9f7d9ed477e8")) {
      
      $aMsg = $aMensagem;
      
      if ($removerQuebras) {
        $ordem = array("\r\n", "\n", "\r");
        $aMsg = str_replace($ordem," ",$aMsg);
      }
      
      if ($escaparAspas) {
        $aMsg = addslashes($aMsg);  
      }
      
      echo("    <script type=\"text/javascript\">debug = debug + \"" . $aMsg . ($separador?"\\n-----":"") ."\\n\"</script>\n");
    }
  }
  
  function obterCasosPai($aIDUnidade,$aApenasOUltimo = False) {
    $aSQL = <<<EOS
  select MBT.id
    from mantis_bug_table MBT
   where MBT.project_id = %u
     and MBT.handler_id = %u
     and MBT.status = %u
order by MBT.id desc
EOS;
    
    $casosPai = executarSQL(sprintf($aSQL,ID_PROJETO_PAI,$aIDUnidade,ID_STATUS_EM_EXECUCAO));
    
    if ($aApenasOUltimo) {
      $resultado = obterRegistro($casosPai)->id;
    } else {
      while ($linha = obterRegistro($casosPai)) {
        $resultado[] = $linha->id;
      }
    }
    
    return $resultado;
  }
    
  require_once(ROOT_MANTIS . "/core/authentication_api.php");
  # --------------------
  # Esta função é uma modificação da função "auth_ensure_user_authenticated" do mantis, localizada em "core/autentication_api.php"
  # Verifica se o ousuário está logado e autenticado
  #  Se a conta do usuário estiver desabilitada ele será deslogado
  #  Se não houver usuário logado, redireciona para a página de login
  #  Se um parâmetro for informado ele será usado como URL de retorno a seguir quando o login for bem sucedido. Se nenhum parâmetro for informado a url da página atual será usada
  function garantirUsuarioAutenticado($p_return_page = "") {
    # if logged in
    if (auth_is_user_authenticated()) {
      # check for access enabled
      # This also makes sure the cookie is valid
      if ( OFF == current_user_get_field( 'enabled' ) ) {
        print_header_redirect(ROOT_MANTIS . '/logout_page.php' );
      }
    } else { # not logged in
      if ( is_blank( $p_return_page ) ) {
        if (!isset($_SERVER['REQUEST_URI'])) {
          $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
        }
        $p_return_page = $_SERVER['REQUEST_URI'];
      }
      $p_return_page = string_url( $p_return_page );
      print_header_redirect(ROOT_MANTIS . '/login_page.php?return=' . $p_return_page );
    }
  }
?>
